import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.awt.event.*;
import java.sql.*;

public class proses_pengembalian extends JInternalFrame {
  JPanel panel_data = new JPanel();
  JLabel jLabel1 = new JLabel();
  JTextField data_nama_anggota = new JTextField();
  JTextField data_no_anggota = new JTextField();
  JLabel no_anggota = new JLabel();
  JLabel nama_anggota = new JLabel();
  JScrollPane scroll_panel = new JScrollPane();
  JTable tabel_buku = new JTable();
  JButton tombol_proses = new JButton();
  DefaultTableModel tabMode;
  JComboBox jc = new JComboBox();
  JLabel status = new JLabel();
  JButton tombol_batal = new JButton();

  public proses_pengembalian() {
    super(".:: Form Pengembalian Buku ::.");
    tampilanGUI();
    tambah_listener();
  }

  void tampilanGUI() {
    jLabel1.setText(
        "Create by Midiyaqa ( Group 2");

    panel_data.setLayout(null);
    data_nama_anggota.setEnabled(false);
    data_nama_anggota.setBounds(new Rectangle(106, 43, 236, 21));
    data_no_anggota.setBounds(new Rectangle(106, 13, 70, 21));
    no_anggota.setBounds(new Rectangle(1, 13, 100, 20));
    nama_anggota.setBounds(new Rectangle(1, 43, 100, 20));

    no_anggota.setHorizontalAlignment(SwingConstants.RIGHT);
    no_anggota.setText("No. Anggota :");
    nama_anggota.setHorizontalAlignment(SwingConstants.RIGHT);
    nama_anggota.setText("Nama Anggota :");
    panel_data.setBorder(BorderFactory.createRaisedBevelBorder());
    panel_data.setDebugGraphicsOptions(0);

    Object[] row = {"Kode Buku", "Judul Buku", "Nama Pengarang",
                   "Nama Penerbit", "Status"};
    tabMode = new DefaultTableModel(null, row);
    tabel_buku.setModel(tabMode);

    jc.addItem("Kembali");
    jc.addItem("Belum Kembali");
    TableColumn colorColumn = tabel_buku.getColumn("Status");
    colorColumn.setCellEditor(new DefaultCellEditor(jc));

    scroll_panel.setBorder(BorderFactory.createLoweredBevelBorder());
    scroll_panel.setBounds(new Rectangle(11, 123, 600, 100));
    tombol_proses.setBounds(new Rectangle(15, 241, 81, 23));
    tombol_proses.setEnabled(false);
    tombol_proses.setText("Proses");
    tombol_batal.setText("Batal");
    tombol_batal.setBounds(new Rectangle(108, 242, 81, 23));
    tombol_batal.setEnabled(false);

    scroll_panel.getViewport().add(tabel_buku);

    status.setFont(new java.awt.Font("Dialog", 0, 20));
    status.setBounds(new Rectangle(14, 77, 499, 37));

    panel_data.add(no_anggota, null);
    panel_data.add(data_nama_anggota, null);
    panel_data.add(data_no_anggota, null);
    panel_data.add(nama_anggota, null);
    panel_data.add(scroll_panel, null);
    panel_data.add(tombol_proses, null);
    panel_data.add(status, null);
    panel_data.add(tombol_batal, null);

    this.getContentPane().add(panel_data, BorderLayout.CENTER);
    this.getContentPane().add(jLabel1, BorderLayout.SOUTH);
  }

  public void tambah_listener() {
    data_no_anggota.setDocument(new saring_karakter().getOnlyDigit());
    data_no_anggota.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (data_no_anggota.getText().length() >= 6) {
          data_no_anggota.setText(data_no_anggota.getText().substring(0, 6));
          Connection kon = new koneksi_database().koneksiDatabase();
          boolean ada_data = false;
          try {
            String sql = "Select * from data_anggota where no_anggota = '" +
                         data_no_anggota.getText() + "'";
            PreparedStatement st = kon.prepareStatement(sql);
            ResultSet rs = st.executeQuery();
            while (rs.next()) {
              data_nama_anggota.setText(rs.getString("nama"));
              ada_data = true;
            }
            st.close();
          }
          catch (SQLException swl) {}
          if (ada_data == true) {
            hapusTabel();
            boolean pinjam_buku = false;
            try {
              String sql = "Select * from data_peminjaman Where no_anggota = '" +
                           data_no_anggota.getText() + "'";
              PreparedStatement state = kon.prepareStatement(sql);
              ResultSet rs = state.executeQuery();
              while (rs.next()) {
                String kode_buku = rs.getString("kode_buku");
                String judul_buku = rs.getString("judul_buku");
                String nama_pengarang = rs.getString("nama_pengarang");
                String nama_penerbit = rs.getString("nama_penerbit");
                Object[] data = {kode_buku, judul_buku, nama_pengarang,
                                nama_penerbit, "Belum Kembali"};
                tabMode.addRow(data);
                pinjam_buku = true;
                status.setText("Ada Buku yang Belum dikembalikan");
                tombol_proses.setEnabled(true);
                tombol_batal.setEnabled(true);
                data_no_anggota.setEnabled(false);
              }
              state.close();
            }
            catch (SQLException swl) {}
            if (pinjam_buku == false) {
              data_no_anggota.setEnabled(true);
              status.setText("Tidak Ada buku yang dipinjam");
              tombol_proses.setEnabled(false);
              tombol_batal.setEnabled(false);
            }
          }
          else {
            JOptionPane.showMessageDialog(null, "Data Anggota Tidak Ditemukan");
            data_no_anggota.setEnabled(true);
            data_no_anggota.setText("");
            data_nama_anggota.setText("");
            data_no_anggota.requestFocus();
            hapusTabel();
          }
        }
      }
    });

    tombol_proses.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Connection kon = new koneksi_database().koneksiDatabase();
        int jml_row = tabel_buku.getRowCount();
        int i = 0;
        do {
          Object status = tabel_buku.getValueAt(i, 4);
          if (status.toString().equalsIgnoreCase("Kembali")) {
            Object kode = tabel_buku.getValueAt(i, 0);
            try {
              String sql = "DELETE FROM data_peminjaman WHERE no_anggota = '" +
                           data_no_anggota.getText() + "' AND kode_buku = '" +
                           kode.toString() + "'";
              PreparedStatement stat = kon.prepareStatement(sql);
              stat.executeUpdate();
              tabMode.removeRow(i);
            }
            catch (SQLException se) {
              System.out.println("Gagal Hapus.. Pesan Error = " + se);
              JOptionPane.showMessageDialog(null,
                  "Gagal Hapus Data.. Coba Lagi\nPesan Error :\n" + se);
            }
            jml_row = tabel_buku.getRowCount();
          }
          else {
            i++;
          }
        }
        while (i < jml_row);

        if (jml_row == 0) {
          tombol_proses.setEnabled(false);
          tombol_batal.setEnabled(false);
          data_no_anggota.setText("");
          data_nama_anggota.setText("");
          data_no_anggota.setEnabled(true);
          data_no_anggota.requestFocus(true);
        }
      }
    });

    tombol_batal.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        hapusTabel();
        data_no_anggota.setText("");
        data_nama_anggota.setText("");
        data_no_anggota.setEnabled(true);
        data_no_anggota.requestFocus(true);
        tombol_proses.setEnabled(false);
        tombol_batal.setEnabled(false);
      }
    });
  }

  public void hapusTabel() {
    int row = tabMode.getRowCount();
    for (int i = 0; i < row; i++) {
      tabMode.removeRow(0);
    }
  }

}